<?php

namespace Siese\EntityBundle\Entity\Repositorios;

use Doctrine\ORM\EntityRepository;

class InspeccionesEntidadesRepository extends EntityRepository
{
    
    public function findAniosDistintos()
    {
        return $this->getEntityManager()
            ->createQuery(
                'SELECT DISTINCT i.ano,
                    i.ano
                 FROM SieseEntityBundle:InspeccionesEntidades i'
             )
            ->getResult();
    }
    
    public function findAniosDistintosPob()
    {
        return $this->getEntityManager()
            ->createQuery(
                'SELECT DISTINCT i.ano,
                    i.ano
                 FROM SieseEntityBundle:InspeccionesEntidadesPob i'
             )
            ->getResult();
    }
   
    public function getAniosDiferentesQueryBuilder()
    {
      $qb = $this->getEntityManager()->createQueryBuilder()
                                     ->select('DISTINCT(I.ano)')
                                     //->distinct('c.aaAnio')
                                     ->from('SieseEntityBundle:InspeccionesEntidades', 'i')
                                     ->orderBy('i.ano', 'ASC');
      
      return $qb;   //return a QueryBuilder object
    }   
      public function findAllDatosListadoInspecciones($anio)
    {
        
        return $this->getEntityManager()
            ->createQuery(
                'SELECT i.id, 
                        i.codInspeccion,
                        i.feRegistro,
                        i.feElaboracion,
                        i.feAplicacionEncuesta,
                        e.nbEntidad,
                        i.recomendaciones
                 FROM SieseEntityBundle:InspeccionesEntidades i
                 LEFT JOIN i.entidad e  
                 WHERE i.ano = :anio
                  
                 ')
            ->setParameters(array('anio' => $anio))
            ->getResult();
    }
    
    public function findUltimoCodInsPob($arregloFiltroBusqueda) {
        
        return $this->getEntityManager()
            ->createQuery(
                'SELECT 
                 MAX(i.codInspeccion)
                 FROM SieseEntityBundle:InspeccionesEntidadesPob i
                 WHERE i.tipoMedida = :tipoMedida
                 AND i.tipoInspeccion = :tipoInspeccion
                 AND i.sede = :sede
                 ')
            ->setParameters($arregloFiltroBusqueda)
            ->getOneOrNullResult();        
    }
    
    public function findUltimoCodIns($arregloFiltroBusqueda) {
        
        return $this->getEntityManager()
            ->createQuery(
                'SELECT 
                 MAX(i.codInspeccion)
                 FROM SieseEntityBundle:InspeccionesEntidades i
                 WHERE i.tipoInspeccion = :tipoInspeccion
                 AND i.sede = :sede
                 ')
            ->setParameters($arregloFiltroBusqueda)
            ->getOneOrNullResult();        
    }
    
     public function countInspeccionesEntidades($usuario = null,$tipoInspeccion,$estatus,$sede = null)
    {
         
        $arregloParameters['tipoInspeccion'] = $tipoInspeccion;
        $arregloParameters['estatus'] = $estatus;
        
        if($usuario):
          $query = 'SELECT   COUNT(i.id) as cantidadInpecciones
                    FROM     SieseEntityBundle:InspeccionesEntidades i
                    WHERE    i.usuario = :usuario
                    AND      i.estatus = :estatus
                    AND      i.tipoInspeccion = :tipoInspeccion
                    GROUP BY i.tipoInspeccion,i.estatus
                    ';  
         $arregloParameters['usuario'] = $usuario;
        elseif($sede):
          $query = 'SELECT   COUNT(i.id) as cantidadInpecciones
                    FROM     SieseEntityBundle:InspeccionesEntidades i
                    WHERE    i.sede = :sede
                    AND      i.estatus = :estatus
                    AND      i.tipoInspeccion = :tipoInspeccion
                    GROUP BY i.tipoInspeccion,i.estatus
                    ';
          $arregloParameters['sede'] = $sede;
        else:
          $query = 'SELECT   COUNT(i.id) as cantidadInpecciones
                    FROM     SieseEntityBundle:InspeccionesEntidades i
                    WHERE    i.estatus = :estatus
                    AND      i.tipoInspeccion = :tipoInspeccion
                    GROUP BY i.tipoInspeccion,i.estatus
                    ';            
        endif;
        
        return $this->getEntityManager()
                    ->createQuery($query)
                    ->setParameters($arregloParameters)
                    ->getOneOrNullResult();
    }
     public function countInspeccionesEntidadesPob($usuario = null,$tipoInspeccion,$estatus,$tipoMedida,$sede = null)
    {
      
        $arregloParameters['tipoInspeccion'] = $tipoInspeccion;
        $arregloParameters['tipoMedida'] = $tipoMedida;
        $arregloParameters['estatus'] = $estatus;
        
        if($usuario):
          $query = 'SELECT   COUNT(i.id) as cantidadInpecciones
                    FROM     SieseEntityBundle:InspeccionesEntidadesPob i
                    WHERE    i.usuario = :usuario
                    AND      i.estatus = :estatus
                    AND      i.tipoInspeccion = :tipoInspeccion
                    AND i.tipoMedida = :tipoMedida
                    GROUP BY i.tipoInspeccion,i.estatus,i.tipoMedida
                    ';  
         $arregloParameters['usuario'] = $usuario;
        elseif($sede):
          $query = 'SELECT   COUNT(i.id) as cantidadInpecciones
                    FROM     SieseEntityBundle:InspeccionesEntidadesPob i
                    WHERE    i.sede = :sede
                    AND      i.estatus = :estatus
                    AND      i.tipoInspeccion = :tipoInspeccion
                    AND i.tipoMedida = :tipoMedida
                    GROUP BY i.tipoInspeccion,i.estatus,i.tipoMedida
                    ';
          $arregloParameters['sede'] = $sede;
        else:
          $query = 'SELECT   COUNT(i.id) as cantidadInpecciones
                    FROM     SieseEntityBundle:InspeccionesEntidadesPob i
                    WHERE    i.estatus = :estatus
                    AND      i.tipoInspeccion = :tipoInspeccion
                    AND i.tipoMedida = :tipoMedida
                    GROUP BY i.tipoInspeccion,i.estatus,i.tipoMedida
                    ';            
        endif;
        
        return $this->getEntityManager()
                    ->createQuery($query)
                    ->setParameters($arregloParameters)
                    ->getOneOrNullResult();         

    }
    

     public function findInspeccionesPorSexo($anio,$estado = null,$entidad = null)
    {
      
        $arregloParameters['anio'] = $anio;
        
        if($entidad):
         $qEntidad = 'AND ie.entidad = :entidad';   
         $arregloParameters['entidad'] = $entidad;
        else:
          $qEntidad = '';
        endif;
         
        if($estado):
         $qEstadoInspeccion = 'AND ie.estadoInspeccion = :estadoInspeccion';   
         $arregloParameters['estadoInspeccion'] = $estado;
        else:
          $qEstadoInspeccion = '';
        endif;
         
        $query = 'SELECT count(ie.id) as cantidadInpecciones,
                           ie.tipoInspeccion 
                    FROM SieseEntityBundle:InspeccionesEntidadesPob AS ie
                    WHERE ie.ano = :anio '.$qEntidad.' '.$qEstadoInspeccion.'
                    GROUP BY ie.tipoInspeccion
                    ';
                  
        return $this->getEntityManager()
                    ->createQuery($query)
                    ->setParameters($arregloParameters)
                    ->getResult();         

    }   
    
    
     public function findInspeccionesPorEdad($anio,$estado = null,$entidad = null)
    {
      
        $arregloParameters['anio'] = $anio;
        
        if($entidad):
         $qEntidad = 'AND ie.entidad = :entidad';   
         $arregloParameters['entidad'] = $entidad;
        else:
          $qEntidad = '';
        endif;
         
        if($estado):
         $qEstadoInspeccion = 'AND ie.estadoInspeccion = :estadoInspeccion';   
         $arregloParameters['estadoInspeccion'] = $estado;
        else:
          $qEstadoInspeccion = '';
        endif;
         
        $query = 'SELECT count(ie.id) as cantidadInpecciones,
                           ie.edad 
                    FROM SieseEntityBundle:InspeccionesEntidadesPob AS ie
                    WHERE ie.ano = :anio '.$qEntidad.' '.$qEstadoInspeccion.'
                    GROUP BY ie.edad
                    ';
                  
        return $this->getEntityManager()
                    ->createQuery($query)
                    ->setParameters($arregloParameters)
                    ->getResult();         

    }     
    
     public function findInspeccionesPorNacionalidad($anio,$estado = null,$entidad = null)
    {
      
        $arregloParameters['anio'] = $anio;
        
        if($entidad):
         $qEntidad = 'AND ie.entidad = :entidad';   
         $arregloParameters['entidad'] = $entidad;
        else:
          $qEntidad = '';
        endif;
         
        if($estado):
         $qEstadoInspeccion = 'AND ie.estadoInspeccion = :estadoInspeccion';   
         $arregloParameters['estadoInspeccion'] = $estado;
        else:
          $qEstadoInspeccion = '';
        endif;
         
        $query = 'SELECT count(ie.id) as cantidadInpecciones,
                           nac.nbNacionalidad 
                    FROM SieseEntityBundle:InspeccionesEntidadesPob AS ie
                    LEFT JOIN ie.nacionalidad AS nac
                    WHERE ie.ano = :anio '.$qEntidad.' '.$qEstadoInspeccion.'
                    GROUP BY nac.nbNacionalidad
                    ';
                  
        return $this->getEntityManager()
                    ->createQuery($query)
                    ->setParameters($arregloParameters)
                    ->getResult();         

    }   
    
    
    public function findInspeccionesPorCapacidadRealInstalada($anio,$estado = null,$entidad = null)
    {
      
        $arregloParameters['anio'] = $anio;
        
        if($entidad):
         $qEntidad = 'AND ie.entidad = :entidad';   
         $arregloParameters['entidad'] = $entidad;
        else:
          $qEntidad = '';
        endif;
         
        if($estado):
         $qEstadoInspeccion = 'AND ie.estadoInspeccion = :estadoInspeccion';   
         $arregloParameters['estadoInspeccion'] = $estado;
        else:
          $qEstadoInspeccion = '';
        endif;
         
        $query = 'SELECT ie.capacidadReal,
                         ie.capacidadInstalada,
                         entidad.nbEntidad
                    FROM SieseEntityBundle:InspeccionesEntidades AS ie
                    LEFT JOIN ie.entidad AS entidad
                    WHERE ie.ano = :anio '.$qEntidad.' '.$qEstadoInspeccion;
                  
        return $this->getEntityManager()
                    ->createQuery($query)
                    ->setParameters($arregloParameters)
                    ->getResult();         

    }    
    
    public function findInspeccionesPorRecomendaciones($anio,$estado,$entidad)
    {
      
        $arregloParameters['anio'] = $anio;
        
        if($entidad):
         $qEntidad = 'AND ie.entidad = :entidad';   
         $arregloParameters['entidad'] = $entidad;
        else:
          $qEntidad = '';
        endif;
         
        if($estado):
         $qEstadoInspeccion = 'AND ie.estadoInspeccion = :estadoInspeccion';   
         $arregloParameters['estadoInspeccion'] = $estado;
        else:
          $qEstadoInspeccion = '';
        endif;
         
        $query = 'SELECT  ie.feRegistro,
                          entidad.nbEntidad,
                          ie.recomendaciones
                  FROM SieseEntityBundle:InspeccionesEntidades AS ie
                  LEFT JOIN ie.entidad AS entidad
                  WHERE ie.ano = :anio '.$qEntidad.' '.$qEstadoInspeccion;
                  
        return $this->getEntityManager()
                    ->createQuery($query)
                    ->setParameters($arregloParameters)
                    ->getResult();         

    }
    
    public function findInspeccionesPorCondicionJuridica($anio,$estado = null,$entidad = null)
    {
      
        $arregloParameters['anio'] = $anio;
        
        if($entidad):
         $qEntidad = 'AND ie.entidad = :entidad';   
         $arregloParameters['entidad'] = $entidad;
        else:
          $qEntidad = '';
        endif;
         
        if($estado):
         $qEstadoInspeccion = 'AND ie.estadoInspeccion = :estadoInspeccion';   
         $arregloParameters['estadoInspeccion'] = $estado;
        else:
          $qEstadoInspeccion = '';
        endif;
         
        $query = 'SELECT COUNT(ie) AS cantidadInspecciones,
                         cj.nbCondicionJuridica
                    FROM SieseEntityBundle:InspeccionesEntidadesPob AS ie
                    LEFT JOIN ie.condicionJuridica AS cj
                    WHERE ie.ano = :anio '.$qEntidad.' '.$qEstadoInspeccion.' 
                    GROUP BY cj.nbCondicionJuridica';
                  
        return $this->getEntityManager()
                    ->createQuery($query)
                    ->setParameters($arregloParameters)
                    ->getResult();         

    }    
}